package com.netty.service;

import com.netty.config.ChannelContainer;
import com.netty.data.Msg;
import com.netty.mapper.MsgMapper;
import com.netty.message.MessageProtocol;
import com.netty.protobuf.MessageProto;
import com.netty.util.GsonUtil;
import com.netty.util.SpringUtil;
import io.netty.channel.Channel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.List;


/**
 * @author
 */
@Component
public class TaskService {


    private int count_A = 0;
    private int count_B = 0;
    @Async
//    @Scheduled(cron = "0/3 * * * * ?")
    public void sendA(){
        count_A++;
        ChannelContainer channelHandler = SpringUtil.getBean(ChannelContainer.class);
        System.out.println("定时执行A："+count_A+"次");
        String msg = "===============螺丝钉解放受到了金佛山卡卡方式决定离开房间都是离开雷锋的是";
        channelHandler.getChannel().writeAndFlush(msg);

    }

    @Async
//    @Scheduled(cron = "0/6 * * * * ?")
    public void sendB(){
        count_B++;
        ChannelContainer channelHandler = SpringUtil.getBean(ChannelContainer.class);
        System.out.println("定时执行B："+count_B+"次");
        String msg = "=============FDSFKPSLDFKSDFAKDPKLAD;KAS飞机数量将开放的洒落的卡上；离开的雷锋的是";
        channelHandler.getChannel().writeAndFlush(msg);

    }


    @Autowired
    private MsgMapper msgMapper;
    @Autowired
    private ChannelContainer channelContainer;

    public String sendMsg(String rownum){
        System.out.println("========================================");
        List<Msg> msgList = msgMapper.getMsgList(rownum);
        int i = 0;
        System.out.println("客户端发送数据：");
        String resultMsg = "";
        while (i < msgList.size()){
            Msg msg = msgList.get(i);
            System.out.println((i+1)+","+ GsonUtil.GsonString(msg));
            resultMsg = sendMsgProtobuf(msg);
//            resultMsg = sendMsgString(msg);
//            resultMsg = sendMsgSmartCarProtocol(msg);
            i++;
        }
        return resultMsg +"发送："+i+"条";
    }
    //传输实体类数据
    @Async
    public String sendMsgProtobuf(Msg msg){
//        String s = GsonUtil.GsonString(msg);
        String s = "======法国电视发射的发生的事都发打扫打扫打扫打扫感到反感的是放松的方生的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放到沙发上的方式打扫打扫打扫打扫感到反感的是放松的方的方式对发生的收费方式的发生颠覆式" +
                "的防守对方的沙发上所发生的发生的，广打扫打扫打扫打扫感到反感的是放松的方告收入大幅度沙发上的地方是否适当放" +
                "松的方式的方式给发给是否适当放松放松打扫打扫打扫打扫感到反感的是放松的方的方式的方式v法当时发生的放松的方" +
                "式发送到发生的广泛的共识放到沙发上电打扫打扫打扫打扫感到反感的是放松的方风扇的风分公司多舒服舒服沙发上" +
                "打扫打扫打扫打扫打扫感到反感的是放松的方式上的防守对方的身份是打扫打扫打扫打扫感到反感的是放松的方地方放" +
                "松的方式地方都是粉色的上的放松的方式的打扫打扫打扫打扫感到反感的是放松的方第三方的身份是对方说的" +
                "，反倒是的方式的方式地方都是粉色的恢打扫打扫打扫打扫感到反感的是放松的方复光滑法国电视发射的发生的事都发生的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放到沙发上的方式打扫打扫打扫打扫感到反感的是放松的方的方式对发生的收费方式的发生颠覆式" +
                "的防守对方的沙发上所发生的发生的，广打扫打扫打扫打扫打扫打扫打扫打扫感到反感的是放松的方感到反感的是放松的方告收入大幅度沙发上的地方是否适当放" +
                "松的方式的方式给发给是否适当放松放松打扫打扫打扫打扫感到反感的是放松的方的方式的方式v法当时发生的放松的方" +
                "式发送到发生的广泛的共识放到沙发上电风扇的风分公司多舒打扫打扫打扫打扫感到反感的是放松的方服舒服沙发上" +
                "打扫打扫打扫打扫打扫感打扫打扫打扫打扫感到反感的是放松的方到反感的是放松的方式上的防守对方的身份是地方放" +
                "松的方式地方都是粉色的打扫打扫打扫打扫感到反感的是放松的方上的放松的方式的第三方的身份是对方说的" +
                "反倒是的方式的方式地方都是粉色的恢复光滑法国电视发射的发生的事都发生的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放打扫打扫打扫打扫感到反感的是放松的方到沙发上的方式的方式对发生的收费方式的发生颠覆式" +
                "的防守对方的沙发上所发生的发生的，广告收入大幅度沙发上打扫打扫打扫打扫感到反感的是放松的方的地方是否适当放" +
                "松的方式的方式给发给是打扫打扫打扫打扫感到反感的是放松的方否适当放松放松的方式的方式v法当时发生的放松的方" +
                "式发送到发生的广泛的共识打扫打扫打扫打扫感到反感的是放松的方放到沙发上电风扇的风分公司多舒服舒服沙发上" +
                "打扫打扫打扫打扫打扫感到反感的是放松的方式上的防守对方打扫打扫打扫打扫感到反感的是放松的方的身份是地方放" +
                "松的方式地方都是粉色的上打扫打扫打扫打扫感到反感的是放松的方的放松的方式的第三方的身份是对方说的" +
                "，反倒是的方式的方式地方打扫打扫打扫打扫感到反感的是放松的方都是粉色的恢复光滑法国电视发射的发生的事都发生的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放到沙发上的方式的方式对发生的收费方打扫打扫打扫打扫感到反感的是放松的方式的发生颠覆式" +
                "的防守对方的沙发上所发生的打扫打扫打扫打扫感到反感的是放松的方发生的，广告收入大幅度沙发上的地方是否适当放" +
                "松的方式的方式给发给是否适当放松放松的方式的方式v法当时打扫打扫打扫打扫感到反感的是放松的方发生的放松的方" +
                "式发送到发生的广泛的共识放打扫打扫打扫打扫感到反感的是放松的方到沙发上电风扇的风分公司多舒服舒服沙发上" +
                "打扫打扫打扫打扫打扫感到反感打扫打扫打扫打扫感到反感的打扫打扫打扫打扫感到反感的是放松的方是放松的方的是放松的方式上的防守对方的身份是地方放" +
                "松的方式地方都是粉色的上的放松的方式的第三方的身份是打打扫打扫打扫打扫感到反感的是放松的方扫打扫打扫打扫感到反感的是放松的方对方说的" +
                "，反倒是的方式的方式地方都是粉色的恢复光滑打扫打扫打扫打扫感到反感的是放松的方打扫打扫打扫打扫感到反感的是放松的方======";
        Channel channel = channelContainer.getChannel();
        String socketString = channel.localAddress().toString();
        MessageProto.Message message = MessageProto.Message.newBuilder().setId(socketString).setContent(s).build();
        channel.writeAndFlush(message);
        return socketString;
    }

    //传字符窜数据
    @Async
    public String sendMsgString(Msg msg){
        String s = GsonUtil.GsonString(msg);
        Channel channel = channelContainer.getChannel();
        String socketString = channel.localAddress().toString();
        channel.writeAndFlush(s);
        return socketString;
    }


    //传输自定义协议数据
    @Async
    public String sendMsgSmartCarProtocol(Msg msg){
        // 发送SmartCar协议的消息
        // 要发送的信息
//        String data = GsonUtil.GsonString(msg);
        String data = "======#!#!#&!*(&#(!&(#!&#(!&#(!)&#)(!&#&#(!&#法国电视发射的发生的事都发生的方式的松的方式的方式给发给是否适当放松放松的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放到沙发上的方式的方式对发生的收松的(^*^*^*^*^#*^**^#*^*#^!*^**)*)*方式的方式给发给是否适当放松放松的方式的费方式的发生颠覆式" +
                "的防守对方的沙发上所发生的发生的，广(^*^*^*^*^#*^**^#*^*#^!*^**)*)*告收入大幅度沙发松的方式的方式给发给是否适当放松放松的方式的上的地方是否适当放" +
                "松的方式的方式给发给是dsadsa否适当放松放松的方式的方式v法松的方式的方式给发给是否适当放松放松的方式的当时发sadadas生的放松的方" +
                "式发送到发生的广泛的共识放到沙发上电(^*^*^*^*^#*^**^#*^*#^!*^**)*)*风扇的风分公司多松的方式的方式给发给是否适当放松放松的方式的舒服舒服沙发上" +
                "打扫打扫打扫打扫打扫感到反感的是放松的方式上的防守对松的(^*^*^*^*^#*^**^#*^*#^!*^**)*)*方式的方式给发给是否适当放松放松的方式的方的身份是地方放" +
                "松的方式地方都是粉色的上的放松的方式的第三方的身份是松的方式的方式给发给是否适当放松放松的方式的对方说的" +
                "，反倒是的方式的方式地方都是粉色的恢复(^*^*^*^*^#*^**^#*^*#^!*^**)*)*光滑法国电视发射的发生的事都发生的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放到沙发上的方式的方式对发生的收松的方式的方式给发给是否适当放松放松的方式的费方式的发生颠覆式" +
                "的防守对方的沙发上所发生的发生的，广告收入大幅度沙发松的方式的方式给发给是否适当放松放松的dasdasda 方式的上的地方是否适当放" +
                "松的方式的方式给发给是否适当放(^*^*^*^*^#*^**^#*^*#^!*^**)*)*松放松的方式的方式v法当松的方式的方式给发给是否适当放松放松的方式的时发生的放松的方" +
                "式发送到发生的广泛的共识放到沙发上电风扇4549131640313的风分公司多松的方式的方式给发给是否适当放松放松的方式的舒服舒服沙发上" +
                "打扫打扫打扫打扫打扫感到反感的是放松的方3123123式上的防守对松的方式的方式给发给是否适当sadsadsadsa放松放松的方式的方的身份是地方放" +
                "松的方式地方都是粉色的上的放松的(^*^*^*^*^#*^**^#*^*#^!*^**)*)*方式的第三方的身份是松的方式的方式给发给是否适当放松放松的方式的对方说的" +
                "反倒是的方式的方式地方都是粉色的恢复光滑法国电视发射松的方式的方式给发给是否适当放松放松的方式的的发生的事都发生的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放到沙发上的(^*^*^*^*^#*^**^#*^*#^!*^**)*)*方式的方式对发生的收松的方式dadasdas的方式给发给是否适当放松放松的方式的费方式的发生颠覆式" +
                "的防守对方的沙发上所发生的发生的，广*(^*^*^*^*^#*^**^#*^*#^!*^**)*)*$@$^%&告收入大幅度沙发松的方式的方式给发给是否适当放松放松的方式的上的地方是否适当放" +
                "松的方式的方式给发给是否适当放松放松的方式的方式v法松的方式的方式给发给是否适当放松放松的方式的当时发生的放松的方" +
                "式发送到发生的(^*^*^*^*^#*^**^#*^*#^!*^**)*)*广泛的共识放到沙发上电风扇的风分公司多松的方式的方式给发给是否适当放松放松的方式的舒服舒服沙发上" +
                "打扫打扫打扫打扫打扫感到反感(^*^*^*^*^#*^**^#*^*#^!*^**)*)*的是放松的方式上的防守对松的方式的方式给发给是否适当放松放松的方式的方的身份是地方放" +
                "松的方式地方都是粉色的上的放松的方式的第三方的身份是松的方式的方式给发给是否适当放松放松的方式的对方说的" +
                "，反倒是的方式的(^*^*^*^*^#*^**^#*^*#^!*^**)*)*方式地方都是粉色的恢复光(^*^*^*^*^#*^**^#*^*#^!*^**)*)*滑法国电视发松的方式的方式给发给是否适当放松放松的方式的射的发生的事都发生的方式的说法过分的事时代风格" +
                "上的放松的方式的方式放到沙发上的方式的方式对发生的收松的方式的方式给发给是否适当放松放松的方式的费方式的发生颠覆式" +
                "的防守对方的沙发上所发生的发生(^*^*^*^*^#*^**^#*^*#^!*^**)*)*的，广告收入大幅度沙发松的方式的方式给发给是否适当放松放松的方式的上的地方是否适当放" +
                "松的方式的方式给发给是否适当放(^*^*^*^*^#*^**^#*^*#^!*^**)*)*松放松的方式的方式v法dasdasda sdasd松的方式的方式给发给是否适当放松放松的方式的当时发生的放松的方" +
                "式发送到发生的广泛的共识放到沙发上电风扇的风分公司多松的方式的方式给发给是否适当放松放松的方式的舒服舒服沙发上" +
                "打扫打扫打扫打扫打扫感到反感的是放松的方式上的防守对松的方式的方式给发给是否适当放松放松的方式的方的身份是地方放" +
                "松的方式地方都是粉色的上的放松(^*^*^*^*^#*^**^#*^*#^!*^**)*)*的方式的第三方的身份是松的方式的方式给发给是否适当放松放松的方式的松的方式的方式给发给是否适当放松放松的方式的对方说的" +
                "，反倒是的方式的方式地方都是粉色的恢复光滑(*&(#&#*^!@*^#(!)#&(!&#()!&#(&!(#&!(#&()!#(&!(#&======";
        Channel channel = channelContainer.getChannel();
        String socketString = channel.localAddress().toString();
        // 获得要发送信息的字节数组
        byte[] content = data.getBytes();
        // 要发送信息的长度
        int contentLength = content.length;
        MessageProtocol protocol = new MessageProtocol(contentLength, content);
        channel.writeAndFlush(protocol);
        return socketString;
    }

}
